fn main() {
    let v = vec![1, 2, 3];
    // for循环会获取iter的所有权
    for ele in v.iter() {
        println!("ele: {}", ele);
    }

    // 使用迭代器时, iter要可变，因为会修改iter内部状态
    let mut iter = v.iter();
    // iter()获取的元素是不可变引用
    assert_eq!(iter.next(), Some(&1));

    // into_iter()会获取元素的所有权
    let mut iter2 = v.into_iter();
    assert_eq!(iter2.next(), Some(1));
}

fn demo1() {
    let v = vec![1, 2, 3];
    let v2: Vec<_> = v.iter().map(|x| x + 1).collect();
    assert_eq!(v2, vec![2, 3, 4])
}
